#ifndef __LOG_H
#define __LOG_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h> 
#include <stdarg.h>
#include <unistd.h>
#include <sys/time.h>
#define GLOB_LOG_EVEL           LOG_DEBUG
#define ENABLE_COLOR            TRUE
#define ENABLE_FILE             TRUE
#define DISABLE_COLOR           FALSE
#define DISBLE_FILE             FALSE
#define FILE_NAME               "log_mday"
#define MSG_SIZE                1024             //一帧信息的最大限制
#define MAX_FILE_NAME_LEN       32       //
#define DAY_PER_SECONDS         86400
typedef enum {
    FALSE,
    TRUE
    } status;
// 定义日志级别
typedef enum {
    LOG_DEBUG,
    LOG_INFO,
    LOG_WARNING,
    LOG_ERROR
    } LogLevel;

// 日志消息结构体
typedef struct {
    LogLevel level;             // 日志级别
    const char *tag;            // 日志标签
    const char *file;           // 所在文件名
    char time_str[20];          // 时间戳
    int line;                   // 所在行号
    char message[MSG_SIZE];     // 日志消息
} LogMsg;

// 日志系统配置结构体
typedef struct {
    LogLevel level;                 // 日志级别
    status enable_color;            // 是否启用彩色输出
    status enable_file_logging;     // 是否启用文件日志
    char *log_file_path;      // 日志文件路径
} LogSystemConfig;

//extern LogMsg lmsg;
// 颜色
#define Blue    "\033[34m" // Blue
#define Green   "\033[32m" // Green
#define Yellow  "\033[33m" // Yellow
#define Red     "\033[31m" // Red
#define Reset   "\033[0m"  // Reset color


// 记录日志的宏定义
#define LOG_MESSAGE(logger,level,color,format,...)  log_message(logger,level, __func__, __FILE__, __LINE__,color,format,##__VA_ARGS__)

#define LOG_DEBUG(logger,...)  LOG_MESSAGE(logger,LOG_DEBUG,Blue,__VA_ARGS__)
#define LOG_INFO(logger,...)   LOG_MESSAGE(logger,LOG_INFO,Green,__VA_ARGS__)
#define LOG_WARN(logger,...)   LOG_MESSAGE(logger,LOG_WARNING,Yellow,__VA_ARGS__)
#define LOG_ERROR(logger,...)  LOG_MESSAGE(logger,LOG_ERROR,Red,__VA_ARGS__)

int init_log_file_rule();
void set_glob_log_level(LogLevel level);
void log_message(LogLevel logger,LogLevel level, const char *tag, const char *file, int line, const char *color, const char *format,...);
#endif